#ifndef _Graph_HPP_
#define _Graph_HPP_

/*! \file graph.hpp
 *
 *  \brief Definicja klasy Graph
 *
 *  Plik zawiera definicję klasy Graph. Obiekt
 *  tej klasy definiuje wygląd krzywej.
 *
 *  \author Karol Kurpanik
 *  \date 2010.04.04
 *  \version 2.20.2
 */

#include <string>

using namespace std;

/*! \class Graph
 *
 * \brief Przechowuje opcje generowania wykresów.
 *
 * Klasa zawiera atrybytu określające opcje przypisane
 * do poszczególnych krzywych umieszczonych na wykresie.
 */
class Graph
{
public:
    /*!
     *  \brief Konstruktor klasy Graph.
     *
     *  Przypisuje domyślne wartości wszystkim atrybutom klasy.
     * \post Graph::_Style = 1, \n
     * Graph::_ifGrid = 0, \n
     * Graph::_ifLine = 1, \n
     * Graph::_Size = 2. \n
     * \return void
     */
    Graph();

    /*!
     * \brief Ustawia wartość pola Graph::_ifLine.
     *
     * Metoda odpowiada na przypisanie wartości polu
     * odpowiadającemu za określenie czy punkty na wykresie
     * mają być połączone linią ciągła.
     * \param state - wartość jaka ma zostać przypisana polu - przyjmuje wartość 0 lub 1.
     * \post Graph::_ifLine = state.
     * \return void.
     */
    inline void setifLine(int state){ this->_ifLine = state; };
    /*!
     * \brief Ustawia wartość pola Graph::_ifGrid.
     *
     * Metoda odpowiada na przypisanie wartości polu
     * określającemu czy na wykresie ma zostać wyświetlona siatka.
     * \param state - wartość jaka ma zostać przypisana polu - przyjmuje wartość 0 lub 1.
     * \post Graph::_ifGrid = state.
     * \return void
     */
    inline void setifGrid(int state){ this->_ifGrid = state; };
    /*!
     * \brief Ustawia wartość pola Graph::_Style.
     *
     * Metoda odpowiada na przypisanie wartości polu
     * określającemy styl wykresu.
     * \param st - wartość jaka ma zostać przypisana polu - przyjmuje wartość
     * z przedziału 1 do ilość wczytanych stylów.
     * \post Graph::_ifStyle = st.
     * \return void
     */
    inline void setStyle(int st){ this->_Style = st; };
    /*!
     * \brief Ustawia wartość pola Graph::_Size.
     *
     * Metoda odpowiada na przypisanie wartości polu
     * określającemu wymiar danych.
     * \param size - wartość jaka ma zostać przypisana polu - przyjmuje wartość 2 lub 3.
     * \post Graph::_Style = st.
     * \return void
     */
    inline void setSize(int size){ this->_Size = size; };
    /*!
     * \brief Pobiera wartość pola Graph::_ifLine
     *
     * Metoda odpowiada za odczytanie wartości pola
     * prywatnego określającego czy punkty na wykresie
     * mają zostać połączone linią.
     * \return int Graph::_ifLine
     */
    inline int getifLine(){ return this->_ifLine; };
    /*!
     * \brief Pobiera wartość pola Graph::_ifGrid
     *
     * Metoda odpowiada za odczytanie wartości pola
     * prywatnego określającego czy na wykresie ma zostać
     * wyświetlona siatka.
     * \return int Graph::_ifGrid
     */
    inline int getifGrid(){ return this->_ifGrid; };
    /*!
     * \brief Pobiera wartość pola Graph::_Style
     *
     * Metoda odpowiada za odczytanie wartości pola
     * prywatnego określającego numer id stylu.
     * \return int Graph::_Style
     */
    inline int getStyle(){ return this->_Style; };
    /*!
     * \brief Pobiera wartość pola Graph::_Size
     *
     * Metoda odpowiada za odczytanie wartości pola
     * prywatnego określającego wymiar danych.
     * \return int Graph::_Size
     */
    inline int getSize(){ return this->_Size; };

private:
    /*!
     * \brief Numer ID stylu.
     *
     * Przechowuje numer ID stylu wykresu. Może zawierać liczbę
     * naturalną dodatnią nie większą niż liczba dostępnych stylów.
     */
    int _Style;
    /*!
     * \brief Flaga siatki.
     *
     * Określa czy na wykresie ma zostać wyświetlona siatka. Przyjmuje
     * dwie wartości: 1 dla tak i 0 dla nie.
     */
    int _ifGrid;
    /*!
     * \brief Flaga linii.
     *
     * Określa czy punkty wykresu mają zostać połączone linią ciągłą.
     * przejmuje dwie wartości: 1 dla tak i 0 dla nie.
     */
    int _ifLine;
    /*!
      * \brief Wymiar danych.
      *
      * Przechowuje wymiar wykresu. Może przyjać wartości 2 lub 3.
      */
    int _Size;
};

#endif // _Graph_HPP_
